共识机制
Ethereum 使用的是 PoW 共识机制,未来几年里将会换成 PoS 共识机制。Ethereum 区块是由矿工计算哈希产生,在 PoW 共识机制中区块需要得到全网络超过51%的节点确认才能够正式被区块链认可。在 Ethereum 网路中,任何人都可以成为矿工。
FIBOS 使用的是 DPoS 共识机制。FIBOS 区块的产生是由21个 BP 轮流出块,产生的区块需要2/3以上的 BP 确认才能够被区块链认可。21个 BP 是由 FO 通证持有者投票选举出。
账户/地址
Ethereum 的用户使用的是地址,一个长达40位的的16进制数。
FIBOS 使用的是账户管理,账户名采用12位数字与字母组合,可自定义,方便用户记忆。
权限
Ethereum 的权限是由地址唯一对应的私钥管理,并且这个私钥是随机生成的,在需要使用的权限的时候用户只能通过私钥授权。
FIBOS 账户默认有2种原生权限: owner、active,一个账户必须“关联” owner、active 权限。
- owner 拥有超级权限,代表着账户的归属者,因为拥有此权限者可以用于操作其他权限配置,该权限常用事务中(转账、合约 action 等)一般不会使用。
- active 常用业务的权限,比如:转账、投票等。
另外还可以根据自己需求自定义权限。
手续费/资源
Ethereum gas
在 Ethereum 中使用区块链上的资源需要消耗 gas,消耗的 gas 作为区块打包的费用支付给矿工。
FIBOS 资源
FIBOS的资源分为两种类型:
- 抵押型资源,包括 CPU 和 NET;
- 消耗性资源,叫做 RAM,也称存储。
开发者发布一个合约必须拥有足够的资源,包括 RAM、CPU 和 NET。
智能合约
编程语言的区别
Ethereum 上开发智能合约使用的语言为 Solidity,这是一门专为 EVM 而开发的语言,对于一般没有接触过 Ethereum 或智能合约的开发者来说,该语言的研发门槛很高。
Ethereum 合约示例:
pragma solidity ^0.4.0;
contract hello {
function hello(uint i){
}
}
FIBOS 使用 JavaScript 编写智能合约,开发成本极低。这让开发智能合约的门槛降低了许多。
FIBOS 合约示例:
exports.hi = user => console.error('in contract:', user);
合约的发布和更新
Ethereum 合约发布成功后会得到一个合约地址。合约地址格式长并且没有规律记忆起来十分困难。Ethereum 合约发布后无法更改。
在 Ethereum 中如果合约发布后发现问题,现有两种解决方案:
- 一个是在合约中预先设置销毁函数,并设置权限只有合约发布者可以调用,在需要的时候调用销毁函数销毁合约。
- 另一个方法是在合约中预先设置 delegatecall,由于 delegatecall 保留了函数调用的状态,因此可以更新目标合约的逻辑,并且状态将保留在代理合约中以供更新后的目标合约的逻辑使用。
这两种方法都需要预先的设置,以及发布合约的账号丢失后,也将失去对合约的控制权。
FIBOS 合约账户名就是发布账户的账户名。发布合约时需要发布账号的资源,包括足够的 RAM、CPU 和 NET。
在 FIBOS 中开发者可以使用发布账户随时更新合约代码。相较于以太坊的合约,FIBOS 的合约后期的维护和更新在技术上容易很多,在成本上低了很多。
生态支持
Ethereum:
-
开发框架: Truffle 具有以下功能:
- 内置的智能合约编译,链接,部署和二进制文件的管理。
- 快速开发下的自动合约测试。
- 脚本化的,可扩展的部署与发布框架。
- 部署到公网或私网的网络环境管理功能
- 使用 EthPM&NPM 提供的包管理,使用 ERC190 标准。
- 与合约直接通信的直接交互控制台(写完合约就可以命令行里验证了)。
- 可配的构建流程,支持紧密集成。
- 在 Truffle 环境里支持执行外部的脚本。
在 Truffle 框架中,可以根据需要编译、部署合约,Truffle 也提供一键启动测试链的工具。
- 托管节点: Infura
Ethereum 的合约可以通过使用 Infura 提供的节点发布合约。
FIBOS:
-
fibos.js 是 FIBOS 区块链的通用库,具有以下功能:
- 使用 NPM 提供的包管理。
- 快速开发下的自动合约测试。
- 提供合约与客户端交互接口。
- 提供合约内部所需的 API 接口。
- 节点: FIBOS 提供一键脚本发布十分简单易用。
-
FIBOS-tracker 是一个 FIBOS 区块链数据 API 服务框架,基于 fib-app 框架实现。
- 提供对 FIBOS 区块数据的 emitter 监听事件。
- 提供 http 服务,支持 GraphQL 调用。
- 支持使用 ORM 定制自己的数据模型 model,自定义数据表以及自定义 hook 监听数据。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。